package org.ttitfly.ttcore.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author laibao Wang
 * @date 2011-07-01
* Hibernate日期查询工具,用于YYYY-MM-DD格式日期查询
* 传入YYYY-MM-DD格式字符串参数
* 返回java.util.Date类型数组，array[0]=YYYY-MM-DD 0:00:00，array[1]=YYYY-MM-DD 23:59:59
* 方便调用criteria.add(Restrictions.between("targetTime", array[0], array[1]));
*/
public class HibernateDateUtil {

	public static Calendar cal = Calendar.getInstance();        

    public static DateFormat dateFormat = null;

    public static Date date = null;


    /**
     * Hibernate日期查询工具
     * @param dateStr 日期字符串，YYYY-MM-DD格式
     * @return        日期数组，Date[0]=YYYY-MM-DD 0:00:00,Date[1]=YYYY-MM-DD 23:59:59
     */
    public static Date[] hibernateDateHelper(String dateStr){
        Date[] dateArray = new Date[2];
        dateArray[0] = parseDate(dateStr);
        dateArray[0] = getDateStart(dateArray[0]);
        dateArray[1] = getDateEnd(dateArray[0]);
        return dateArray;
    }


    /**
     * 格式化日期
     * @param dateStr  String 字符型日期
     * @param format   String 格式
     * @return Date    日期
     */
    public static Date parseDate(String dateStr, String format) {
       try {
            dateFormat = new SimpleDateFormat(format);
            String dt = dateStr.replaceAll("-", "/");
            if ((!dt.equals("")) && (dt.length() < format.length())) {
               dt += format.substring(dt.length()).replaceAll("[YyMmDdHhSs]", "0");
            }
            date = (Date) dateFormat.parse(dt);
            } catch (Exception e) {
            }
            return date;
    }

    /**
     * 获取日期最早时间，如传入2011-07-01，返回2011-07-01 0:00:00
     * @param date
     * @return
     */
    public static Date getDateStart(Date d){
       cal.setTime(d);
       cal.set(Calendar.HOUR, 0);
       cal.set(Calendar.MINUTE, 0);
       cal.set(Calendar.SECOND, 0);
       return cal.getTime();
    }


    /**
     * 获取日期最晚时间，如传入2011-07-01，返回2011-07-01 23:59:59
     * @param date
     * @return
     */
    public static Date getDateEnd(Date d){
       cal.setTime(d);
       cal.set(Calendar.HOUR, 23);
       cal.set(Calendar.MINUTE, 59);
       cal.set(Calendar.SECOND, 59);
       return cal.getTime();
    }


    /**
     * 格式化日期
     * @param dateStr  String 字符型日期：YYYY-MM-DD 格式
     * @return Date    日期
     */
    public static Date parseDate(String dateStr) {
      return parseDate(dateStr, "yyyy/MM/dd");
    }

    

    /**
     * 输出日期
     * @param date
     * @return
     */
    public static String printDate(Date date){
       return date.toLocaleString();
    }

    public static void main(String[] args) {
      String dateStr = "2011-07-01";
      Date start = hibernateDateHelper(dateStr)[0];
      Date end = hibernateDateHelper(dateStr)[1];
      System.out.println("start:" + printDate(start) + ", end:" + printDate(end));
    }
}
